#!/bin/bash
source ./common.sh
source ./config_base.sh

# 功能说明
echo    "功能说明"
echo "1. 批量删除本地、远程仓库中指定的分支名称"
# 打印空行
echo -e '\n'

# ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

module_array=(${module_name_list})

# 根据配置信息生成gitlab的源代码克隆地址
module_name_list_size=${#module_array[*]}
echo "Hello，您本次操作了"${module_name_list_size}"个服务"

# 禁止删除master分支
if [ ${USE_BRANCH_VERSION} = "master" ]
then
    echo "严重：禁止删除master分支，请重新输入！！！"
    exit
fi    

int=0
while(( $int < ${module_name_list_size}))
do    
    # 创建当前git项目的父级临时目录tmp，存放项目信息
    module_name=${module_array[$int]}
    module_folder_name=${MODULE_ID}-${module_name}

    code_url=http://${SOURCE_CODE_SERVER}/${GITLAB_GROUP_NAME}/${module_folder_name}.git
    echo "开始生成第"$(expr ${int} + 1)"个，服务名：${module_array[$int]}, 源代码地址："${code_url}
    let "int++"


    # 根据固定规则生成代码分支名称,分支名称后缀branch 
    echo "根据固定规则构造代码分支名称：项目名称-服务名称-分支名称"
    use_branch_name=${MODULE_ID}"-"${module_name}-$USE_BRANCH_VERSION
    new_branch_name=${MODULE_ID}"-"${module_name}-${NEW_BRANCH_VERSION}


    #  开始管理分支
    # git文件夹是否存在
    dirPath="${PROJECT_PATH}/project/${module_folder_name}"
    echo ${dirPath}

    if [ -d ${dirPath} ]
    then
        echo "${module_name}目录存在，校验通过"
    else
        echo ${module_name}"目录不存在，即将克隆代码并创建目录"
        echo "当前目录："$(pwd)
        # 将克隆的代码统一放到一个目录下
        cd $PROJECT_PATH/project
        git clone ${code_url}
        # 目录第二次校验，避免git地址错误造成创建临时文件夹
        if [ -d ${dirPath} ]
        then
            echo "目录第二次校验，${module_folder_name}目录存在，校验通过"
        else
            echo ${module_folder_name}"目录不存在，跳出循环！！！"
            # 打印空行，分割模块
            echo -e '----------------------------------------------------------------------------------------------------------------------------------------\n'
            continue
        fi
    fi
    
    echo "进入模块目录： "${dirPath}
    cd ${dirPath}

    # 创建临时文件夹，存放项目信息
    module_tmp_dir="../tmp/${module_name}"
    mkdir -p ${module_tmp_dir}

    # 克隆代码后，到远程仓库中拉取所有你本地仓库中还没有的数据
    git fetch
    
    # 基于当前使用分支，开始创建新分支............
    # 根据当前标记的标签版本号，反推出上一次的标签号
    echo -e "删除使用分支"${use_branch_name}" 开始\n"

    # 切换到主分支，避免罗列所有分支时，使用分支前出现星号*
    echo "      准备切换至主分支：master"
    git co master

    #创建临时文件，存放分支名称
    branch_exist_validate="branch_exist_validate.tmp"

    # 构造远程分支名称
    remote_branch_name="remotes/origin/"${use_branch_name}

    # 其中-d代表用什么进行分割，-f 2代表要第2个结果 
    git br -a|grep ${remote_branch_name} | cut -d "/" -f 3 > ${module_tmp_dir}/${branch_exist_validate} 

    # 读取临时文件,没有切换到指定分支不用去除*号，直接获取分支名称
    #branch_read_name=$(grep -w " ${new_branch_name}" ${module_tmp_dir}/${branch_exist_validate})
    branch_read_name=$(awk '{print $1}' ${module_tmp_dir}/${branch_exist_validate})

    echo "获取远程分支名称： "${branch_read_name}
    
    if [ ${branch_read_name} ]; then
        branch_is_exist="是"
        echo "获取使用分支的远程分支名称，${use_branch_name},是否存在： "${branch_is_exist}
        echo "      删除本地的使用分支${use_branch_name}"
        git br -d ${use_branch_name}
        echo "      删除远程仓库的使用分支${branch_read_name}"
        git push origin :${use_branch_name}
        echo "      删除分支成功"${branch_read_name}
    else
        branch_is_exist="否"
        echo "被删除使用分支的远程分支名称${branch_read_name},不存在, 跳出循环！！！"
        # 打印空行，分割模块
        echo -e '----------------------------------------------------------------------------------------------------------------------------------------\n'
        continue
    fi  
    
    echo -e "\n本地分支列表"
    git br --list

    echo -e "\n删除使用分支"${new_branch_name}" 结束" 
done    